package edu.northwestern.cbits.purple_robot_manager.probes.devices;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.wearable.DataApi;
import com.google.android.gms.wearable.DataEvent;
import com.google.android.gms.wearable.DataEventBuffer;
import com.google.android.gms.wearable.DataItem;
import com.google.android.gms.wearable.DataMap;
import com.google.android.gms.wearable.DataMapItem;
import com.google.android.gms.wearable.Wearable;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Map;
import edu.northwestern.cbits.purple_robot_manager.AndroidWearService;
import edu.northwestern.cbits.purple_robot_manager.R;
import edu.northwestern.cbits.purple_robot_manager.activities.settings.FlexibleListPreference;
import edu.northwestern.cbits.purple_robot_manager.calibration.AndroidWearCalibrationHelper;
import edu.northwestern.cbits.purple_robot_manager.logging.LogManager;
import edu.northwestern.cbits.purple_robot_manager.logging.SanityCheck;
import edu.northwestern.cbits.purple_robot_manager.logging.SanityManager;
import edu.northwestern.cbits.purple_robot_manager.probes.Probe;
import edu.northwestern.cbits.purple_robot_manager.probes.builtin.ContinuousProbe;
import edu.northwestern.cbits.purple_robot_manager.probes.devices.wear.WearBatteryProbe;
public class AndroidWearProbe extends Probe implements DataApi.DataListener
{
public final static String PROBE_NAME = "edu.northwestern.cbits.purple_robot_manager.probes.devices.AndroidWearProbe";
public static final String ENABLED = "config_probe_android_wear_enabled";
public static final boolean DEFAULT_ENABLED = false;
public static final String URI_READING_PREFIX = "/purple-robot-reading";
public static final String ACCELEROMETER_ENABLED = "config_probe_android_wear_accelerometer_enabled";
public static final String GYROSCOPE_ENABLED = "config_probe_android_wear_gyroscope_enabled";
public static final String MAGNETOMETER_ENABLED = "config_probe_android_wear_magnetometer_enabled";
public static final String LIGHT_METER_ENABLED = "config_probe_android_wear_light_meter_enabled";
public static final String HEART_METER_ENABLED = "config_probe_android_wear_heart_meter_enabled";
public static final String LIVEWELL_COUNTS_ENABLED = "config_probe_android_wear_livewell_enabled";
public static final boolean ACCELEROMETER_DEFAULT_ENABLED = true;
public static final boolean GYROSCOPE_DEFAULT_ENABLED = false;
public static final boolean MAGNETOMETER_DEFAULT_ENABLED = false;
public static final boolean LIGHT_METER_DEFAULT_ENABLED = false;
public static final boolean HEART_METER_DEFAULT_ENABLED = false;
public static final boolean LIVEWELL_COUNTS_DEFAULT_ENABLED = false;
public static final String ACCELEROMETER_FREQUENCY = "config_probe_android_wear_accelerometer_frequency";
public static final String GYROSCOPE_FREQUENCY = "config_probe_android_wear_gyroscope_frequency";
public static final String MAGNETOMETER_FREQUENCY = "config_probe_android_wear_magnetometer_frequency";
public static final String LIGHT_METER_FREQUENCY = "config_probe_android_wear_light_meter_frequency";
public static final String HEART_METER_FREQUENCY = "config_probe_android_wear_heart_meter_frequency";
public static final String LIVEWELL_BIN_SIZE = "config_probe_android_wear_livewell_bin_size";
public static final String LIVEWELL_DEFAULT_BIN_SIZE = "60";
private static final String INTERVAL = "config_probe_android_wear_interval";
private static final String DEFAULT_INTERVAL = "300000";
private GoogleApiClient _apiClient = null;
private Context _context = null;
private long _lastRequest = 0;
@Override
public String getPreferenceKey() {
return "built_in_android_wear";
}
@Override
public String name(Context context)
{
return "edu.northwestern.cbits.purple_robot_manager.probes.devices.AndroidWearProbe";
}
@Override
public String title(Context context)
{
return context.getString(R.string.title_android_wear_probe);
}
@Override
public String probeCategory(Context context)
{
return context.getResources().getString(R.string.probe_other_devices_category);
}
@Override
@SuppressWarnings("deprecation")
public PreferenceScreen preferenceScreen(final Context context, PreferenceManager manager)
{
PreferenceScreen screen = super.preferenceScreen(context, manager);
screen.setTitle(this.title(context));
screen.setSummary(R.string.summary_android_wear_probe_desc);
CheckBoxPreference enabled = new CheckBoxPreference(context);
enabled.setTitle(R.string.title_enable_probe);
enabled.setKey(AndroidWearProbe.ENABLED);
enabled.setDefaultValue(AndroidWearProbe.DEFAULT_ENABLED);
screen.addPreference(enabled);
FlexibleListPreference interval = new FlexibleListPreference(context);
interval.setKey(AndroidWearProbe.INTERVAL);
interval.setEntryValues(R.array.probe_satellite_frequency_values);
interval.setEntries(R.array.probe_satellite_frequency_labels);
interval.setTitle(R.string.probe_fetch_rate_label);
interval.setDefaultValue(AndroidWearProbe.DEFAULT_INTERVAL);
screen.addPreference(interval);
PreferenceScreen accel = manager.createPreferenceScreen(context);
accel.setTitle(R.string.title_android_wear_probe_accel_screen);
CheckBoxPreference accelEnabled = new CheckBoxPreference(context);
accelEnabled.setTitle(R.string.title_sensor_enable_sensor);
accelEnabled.setKey(AndroidWearProbe.ACCELEROMETER_ENABLED);
accelEnabled.setDefaultValue(AndroidWearProbe.ACCELEROMETER_DEFAULT_ENABLED);
accel.addPreference(accelEnabled);
FlexibleListPreference accelFrequency = new FlexibleListPreference(context);
accelFrequency.setKey(AndroidWearProbe.ACCELEROMETER_FREQUENCY);
accelFrequency.setEntryValues(R.array.probe_continuous_frequency_values);
accelFrequency.setEntries(R.array.probe_continuous_frequency_labels);
accelFrequency.setTitle(R.string.probe_frequency_label);
accelFrequency.setDefaultValue(ContinuousProbe.DEFAULT_FREQUENCY);
accel.addPreference(accelFrequency);
screen.addPreference(accel);
PreferenceScreen gyro = manager.createPreferenceScreen(context);
gyro.setTitle(R.string.title_android_wear_probe_gyro_screen);
CheckBoxPreference gyroEnabled = new CheckBoxPreference(context);
gyroEnabled.setTitle(R.string.title_sensor_enable_sensor);
gyroEnabled.setKey(AndroidWearProbe.GYROSCOPE_ENABLED);
gyroEnabled.setDefaultValue(AndroidWearProbe.GYROSCOPE_DEFAULT_ENABLED);
gyro.addPreference(gyroEnabled);
FlexibleListPreference gyroFrequency = new FlexibleListPreference(context);
gyroFrequency.setKey(AndroidWearProbe.GYROSCOPE_FREQUENCY);
gyroFrequency.setEntryValues(R.array.probe_continuous_frequency_values);
gyroFrequency.setEntries(R.array.probe_continuous_frequency_labels);
gyroFrequency.setTitle(R.string.probe_frequency_label);
gyroFrequency.setDefaultValue(ContinuousProbe.DEFAULT_FREQUENCY);
gyro.addPreference(gyroFrequency);
screen.addPreference(gyro);
PreferenceScreen magnet = manager.createPreferenceScreen(context);
magnet.setTitle(R.string.title_android_wear_probe_magnet_screen);
CheckBoxPreference magnetEnabled = new CheckBoxPreference(context);
magnetEnabled.setTitle(R.string.title_sensor_enable_sensor);
magnetEnabled.setKey(AndroidWearProbe.MAGNETOMETER_ENABLED);
magnetEnabled.setDefaultValue(AndroidWearProbe.MAGNETOMETER_DEFAULT_ENABLED);
magnet.addPreference(magnetEnabled);
FlexibleListPreference magnetFrequency = new FlexibleListPreference(context);
magnetFrequency.setKey(AndroidWearProbe.MAGNETOMETER_FREQUENCY);
magnetFrequency.setEntryValues(R.array.probe_continuous_frequency_values);
magnetFrequency.setEntries(R.array.probe_continuous_frequency_labels);
magnetFrequency.setTitle(R.string.probe_frequency_label);
magnetFrequency.setDefaultValue(ContinuousProbe.DEFAULT_FREQUENCY);
magnet.addPreference(magnetFrequency);
screen.addPreference(magnet);
PreferenceScreen light = manager.createPreferenceScreen(context);
light.setTitle(R.string.title_android_wear_probe_light_screen);
CheckBoxPreference lightEnabled = new CheckBoxPreference(context);
lightEnabled.setTitle(R.string.title_sensor_enable_sensor);
lightEnabled.setKey(AndroidWearProbe.LIGHT_METER_ENABLED);
lightEnabled.setDefaultValue(AndroidWearProbe.LIGHT_METER_DEFAULT_ENABLED);
light.addPreference(lightEnabled);
FlexibleListPreference lightFrequency = new FlexibleListPreference(context);
lightFrequency.setKey(AndroidWearProbe.LIGHT_METER_FREQUENCY);
lightFrequency.setEntryValues(R.array.probe_continuous_frequency_values);
lightFrequency.setEntries(R.array.probe_continuous_frequency_labels);
lightFrequency.setTitle(R.string.probe_frequency_label);
lightFrequency.setDefaultValue(ContinuousProbe.DEFAULT_FREQUENCY);
light.addPreference(lightFrequency);
screen.addPreference(light);
PreferenceScreen heart = manager.createPreferenceScreen(context);
heart.setTitle(R.string.title_android_wear_probe_heart_screen);
CheckBoxPreference heartEnabled = new CheckBoxPreference(context);
heartEnabled.setTitle(R.string.title_sensor_enable_sensor);
heartEnabled.setKey(AndroidWearProbe.HEART_METER_ENABLED);
heartEnabled.setDefaultValue(AndroidWearProbe.HEART_METER_DEFAULT_ENABLED);
heart.addPreference(heartEnabled);
FlexibleListPreference heartFrequency = new FlexibleListPreference(context);
heartFrequency.setKey(AndroidWearProbe.HEART_METER_FREQUENCY);
heartFrequency.setEntryValues(R.array.probe_continuous_frequency_values);
heartFrequency.setEntries(R.array.probe_continuous_frequency_labels);
heartFrequency.setTitle(R.string.probe_frequency_label);
heartFrequency.setDefaultValue(ContinuousProbe.DEFAULT_FREQUENCY);
heart.addPreference(heartFrequency);
screen.addPreference(heart);
PreferenceScreen studyScreen = manager.createPreferenceScreen(context);
studyScreen.setTitle(R.string.title_studies_options);
PreferenceScreen livewellScreen = manager.createPreferenceScreen(context);
livewellScreen.setTitle(R.string.title_studies_livewell_options);
CheckBoxPreference livewellEnabled = new CheckBoxPreference(context);
livewellEnabled.setTitle(R.string.title_livewell_wear_enable_sensor);
livewellEnabled.setKey(AndroidWearProbe.LIVEWELL_COUNTS_ENABLED);
livewellEnabled.setDefaultValue(AndroidWearProbe.LIVEWELL_COUNTS_DEFAULT_ENABLED);
livewellScreen.addPreference(livewellEnabled);
FlexibleListPreference livewellBins = new FlexibleListPreference(context);
livewellBins.setKey(AndroidWearProbe.LIVEWELL_BIN_SIZE);
livewellBins.setEntryValues(R.array.probe_livewell_wear_bin_values);
livewellBins.setEntries(R.array.probe_livewell_wear_bin_labels);
livewellBins.setTitle(R.string.title_livewell_wear_bin_size);
livewellBins.setDefaultValue(AndroidWearProbe.LIVEWELL_DEFAULT_BIN_SIZE);
livewellScreen.addPreference(livewellBins);
studyScreen.addPreference(livewellScreen);
screen.addPreference(studyScreen);
Preference fetchNow = new Preference(context);
fetchNow.setTitle(R.string.action_request_data);
fetchNow.setSummary(R.string.action_desc_request_data);
final AndroidWearProbe me = this;
fetchNow.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener()
{
public boolean onPreferenceClick(Preference preference)
{
me._lastRequest = 0;
return true;
}
});
screen.addPreference(fetchNow);
return screen;
}
@Override
public String summary(Context context)
{
return context.getString(R.string.summary_android_wear_probe_desc);
}
@Override
public void enable(Context context)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.ENABLED, true);
e.commit();
}
@Override
public void disable(Context context)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.ENABLED, false);
e.commit();
}
@Override
public Map<String, Object> configuration(Context context)
{
Map<String, Object> map = super.configuration(context);
SharedPreferences prefs = Probe.getPreferences(context);
double interval = Double.parseDouble(prefs.getString(AndroidWearProbe.INTERVAL, AndroidWearProbe.DEFAULT_INTERVAL));
map.put(AndroidWearProbe.INTERVAL, interval);
boolean accelEnabled = prefs.getBoolean(AndroidWearProbe.ACCELEROMETER_ENABLED, AndroidWearProbe.ACCELEROMETER_DEFAULT_ENABLED);
map.put(AndroidWearProbe.ACCELEROMETER_ENABLED, accelEnabled);
double accelFreq = Double.parseDouble(prefs.getString(AndroidWearProbe.ACCELEROMETER_FREQUENCY, ContinuousProbe.DEFAULT_FREQUENCY));
map.put(AndroidWearProbe.ACCELEROMETER_FREQUENCY, accelFreq);
boolean gyroEnabled = prefs.getBoolean(AndroidWearProbe.GYROSCOPE_ENABLED, AndroidWearProbe.GYROSCOPE_DEFAULT_ENABLED);
map.put(AndroidWearProbe.GYROSCOPE_ENABLED, gyroEnabled);
double gyroFreq = Double.parseDouble(prefs.getString(AndroidWearProbe.GYROSCOPE_FREQUENCY, ContinuousProbe.DEFAULT_FREQUENCY));
map.put(AndroidWearProbe.GYROSCOPE_FREQUENCY, gyroFreq);
boolean magnetEnabled = prefs.getBoolean(AndroidWearProbe.MAGNETOMETER_ENABLED, AndroidWearProbe.MAGNETOMETER_DEFAULT_ENABLED);
map.put(AndroidWearProbe.MAGNETOMETER_ENABLED, magnetEnabled);
double magnetFreq = Double.parseDouble(prefs.getString(AndroidWearProbe.MAGNETOMETER_FREQUENCY, ContinuousProbe.DEFAULT_FREQUENCY));
map.put(AndroidWearProbe.MAGNETOMETER_FREQUENCY, magnetFreq);
boolean lightEnabled = prefs.getBoolean(AndroidWearProbe.LIGHT_METER_ENABLED, AndroidWearProbe.LIGHT_METER_DEFAULT_ENABLED);
map.put(AndroidWearProbe.LIGHT_METER_ENABLED, lightEnabled);
double lightFreq = Double.parseDouble(prefs.getString(AndroidWearProbe.LIGHT_METER_FREQUENCY, ContinuousProbe.DEFAULT_FREQUENCY));
map.put(AndroidWearProbe.LIGHT_METER_FREQUENCY, lightFreq);
boolean heartEnabled = prefs.getBoolean(AndroidWearProbe.HEART_METER_ENABLED, AndroidWearProbe.HEART_METER_DEFAULT_ENABLED);
map.put(AndroidWearProbe.HEART_METER_ENABLED, heartEnabled);
double heartFreq = Double.parseDouble(prefs.getString(AndroidWearProbe.HEART_METER_FREQUENCY, ContinuousProbe.DEFAULT_FREQUENCY));
map.put(AndroidWearProbe.HEART_METER_FREQUENCY, heartFreq);
boolean livewellEnabled = prefs.getBoolean(AndroidWearProbe.LIVEWELL_COUNTS_ENABLED, AndroidWearProbe.LIVEWELL_COUNTS_DEFAULT_ENABLED);
map.put(AndroidWearProbe.LIVEWELL_COUNTS_ENABLED, livewellEnabled);
double livewellBinSize = Double.parseDouble(prefs.getString(AndroidWearProbe.LIVEWELL_BIN_SIZE, AndroidWearProbe.LIVEWELL_DEFAULT_BIN_SIZE));
map.put(AndroidWearProbe.LIVEWELL_BIN_SIZE, livewellBinSize);
return map;
}
@Override
public void updateFromMap(Context context, Map<String, Object> params)
{
super.updateFromMap(context, params);
if (params.containsKey(AndroidWearProbe.INTERVAL))
{
Object frequency = params.get(AndroidWearProbe.INTERVAL);
if (frequency instanceof Double)
{
frequency = ((Double) frequency).longValue();
}
if (frequency instanceof Long)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.INTERVAL, frequency.toString());
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.ACCELEROMETER_ENABLED))
{
Object enabled = params.get(AndroidWearProbe.ACCELEROMETER_ENABLED);
if (enabled instanceof Boolean)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.ACCELEROMETER_ENABLED, ((Boolean) enabled));
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.GYROSCOPE_ENABLED))
{
Object enabled = params.get(AndroidWearProbe.GYROSCOPE_ENABLED);
if (enabled instanceof Boolean)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.GYROSCOPE_ENABLED, ((Boolean) enabled));
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.MAGNETOMETER_ENABLED))
{
Object enabled = params.get(AndroidWearProbe.MAGNETOMETER_ENABLED);
if (enabled instanceof Boolean)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.MAGNETOMETER_ENABLED, ((Boolean) enabled));
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.LIGHT_METER_ENABLED))
{
Object enabled = params.get(AndroidWearProbe.LIGHT_METER_ENABLED);
if (enabled instanceof Boolean)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.LIGHT_METER_ENABLED, ((Boolean) enabled));
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.HEART_METER_ENABLED))
{
Object enabled = params.get(AndroidWearProbe.HEART_METER_ENABLED);
if (enabled instanceof Boolean)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.HEART_METER_ENABLED, ((Boolean) enabled));
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.LIVEWELL_COUNTS_ENABLED))
{
Object enabled = params.get(AndroidWearProbe.LIVEWELL_COUNTS_ENABLED);
if (enabled instanceof Boolean)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putBoolean(AndroidWearProbe.LIVEWELL_COUNTS_ENABLED, ((Boolean) enabled));
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.LIVEWELL_BIN_SIZE))
{
Object frequency = params.get(Probe.PROBE_FREQUENCY);
if (frequency instanceof Long || frequency instanceof Integer)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.LIVEWELL_BIN_SIZE, frequency.toString());
e.commit();
}
if (frequency instanceof Double)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.LIVEWELL_BIN_SIZE, "" + ((Double) frequency).intValue());
e.commit();
}
else if (frequency instanceof String)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.LIVEWELL_BIN_SIZE, frequency.toString());
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.HEART_METER_FREQUENCY))
{
Object frequency = params.get(AndroidWearProbe.HEART_METER_FREQUENCY);
if (frequency instanceof Long || frequency instanceof Integer)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.HEART_METER_FREQUENCY, frequency.toString());
e.commit();
}
if (frequency instanceof Double)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.HEART_METER_FREQUENCY, "" + ((Double) frequency).intValue());
e.commit();
}
else if (frequency instanceof String)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.HEART_METER_FREQUENCY, frequency.toString());
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.LIGHT_METER_FREQUENCY))
{
Object frequency = params.get(AndroidWearProbe.LIGHT_METER_FREQUENCY);
if (frequency instanceof Long || frequency instanceof Integer)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.LIGHT_METER_FREQUENCY, frequency.toString());
e.commit();
}
if (frequency instanceof Double)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.LIGHT_METER_FREQUENCY, "" + ((Double) frequency).intValue());
e.commit();
}
else if (frequency instanceof String)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.LIGHT_METER_FREQUENCY, frequency.toString());
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.MAGNETOMETER_FREQUENCY))
{
Object frequency = params.get(AndroidWearProbe.MAGNETOMETER_FREQUENCY);
if (frequency instanceof Long || frequency instanceof Integer)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.MAGNETOMETER_FREQUENCY, frequency.toString());
e.commit();
}
if (frequency instanceof Double)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.MAGNETOMETER_FREQUENCY, "" + ((Double) frequency).intValue());
e.commit();
}
else if (frequency instanceof String)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.MAGNETOMETER_FREQUENCY, frequency.toString());
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.GYROSCOPE_FREQUENCY))
{
Object frequency = params.get(AndroidWearProbe.GYROSCOPE_FREQUENCY);
if (frequency instanceof Long || frequency instanceof Integer)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.GYROSCOPE_FREQUENCY, frequency.toString());
e.commit();
}
if (frequency instanceof Double)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.GYROSCOPE_FREQUENCY, "" + ((Double) frequency).intValue());
e.commit();
}
else if (frequency instanceof String)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.GYROSCOPE_FREQUENCY, frequency.toString());
e.commit();
}
}
if (params.containsKey(AndroidWearProbe.ACCELEROMETER_FREQUENCY))
{
Object frequency = params.get(AndroidWearProbe.ACCELEROMETER_FREQUENCY);
if (frequency instanceof Long || frequency instanceof Integer)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.ACCELEROMETER_FREQUENCY, frequency.toString());
e.commit();
}
if (frequency instanceof Double)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.ACCELEROMETER_FREQUENCY, "" + ((Double) frequency).intValue());
e.commit();
}
else if (frequency instanceof String)
{
SharedPreferences prefs = Probe.getPreferences(context);
Editor e = prefs.edit();
e.putString(AndroidWearProbe.ACCELEROMETER_FREQUENCY, frequency.toString());
e.commit();
}
}
}
@Override
public boolean isEnabled(Context context)
{
this._context = context.getApplicationContext();
SharedPreferences prefs = Probe.getPreferences(context);
if (super.isEnabled(context))
{
if (prefs.getBoolean(AndroidWearProbe.ENABLED, AndroidWearProbe.DEFAULT_ENABLED))
{
AndroidWearCalibrationHelper.check(context, true);
long now = System.currentTimeMillis();
long interval = Long.parseLong(prefs.getString(AndroidWearProbe.INTERVAL, AndroidWearProbe.DEFAULT_INTERVAL));
if (now - this._lastRequest > interval)
{
this._lastRequest = now;
AndroidWearService.requestDataFromDevices(context);
}
return true;
}
}
AndroidWearCalibrationHelper.check(context, false);
return false;
}
@Override
public void onDataChanged(DataEventBuffer dataEvents)
{
for (DataEvent event : dataEvents)
{
if (event.getType() == DataEvent.TYPE_CHANGED)
{
DataItem item = event.getDataItem();
if (item.getUri().getPath().compareTo(AndroidWearProbe.URI_READING_PREFIX) == 0)
{
DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
this.transmitData(this._context, dataMap.toBundle());
String probeName = dataMap.getString("PROBE", "");
if (probeName.equals(WearBatteryProbe.NAME))
{
SanityManager sanity = SanityManager.getInstance(this._context);
String name = this._context.getString(R.string.name_sanity_wear_battery);
int level = dataMap.getInt("BATTERY_LEVEL", Integer.MAX_VALUE);
if (level < 30)
{
String message = this._context.getString(R.string.name_sanity_wear_battery_warning);
sanity.addAlert(SanityCheck.WARNING, name, message, null);
}
else
sanity.clearAlert(name);
}
Wearable.DataApi.deleteDataItems(this._apiClient, item.getUri());
}
}
else if (event.getType() == DataEvent.TYPE_DELETED)
{
}
}
}
}